package com.huluobo.a2308douyindemo.utils

import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.Observer

/**
 *  Created by LC on 2025/10/28.
 *  解决LiveDaa数据倒灌的问题的自定义类
 */
class UnPeekLiveData<T> : MutableLiveData<T>() {
    //标记是否为粘性数据(需要被新观察者忽略的数据)
    private var isSticky = false

    //发送非粘性数据(新观察者不会收到历史数据)
    fun setContentValue(value: T) {
        isSticky = false
        setValue(value)
    }

    //发送粘性数据(新观察者会受到历史数据,类似普通的LiveData)
    fun setStickyValue(value: T) {
        isSticky = true
        setValue(value)
    }

    override fun observe(owner: LifecycleOwner, observer: Observer<in T>) {
        //重写当产生数据变化的时候
        super.observe(owner) { value ->
            //如果不是粘性数据,且当前数据是旧数据(观察者是新注册的),则忽略
            if (!isSticky) {
                //通过判断生命周期状态,过滤到重建时的旧数据
                val currentState = owner.lifecycle.currentState
                if (currentState.isAtLeast(Lifecycle.State.STARTED)) {
                    observer.onChanged(value)
                }
            } else {
                //粘性数据正常发送
                observer.onChanged(value)
            }
        }
    }
}